﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIPDTO;

namespace SIPDAL
{
    public class mgDistrito
    {
       /// <summary>
        /// Declaracion de Variables
        /// </summary>
        /// 
        SIPDataContext dc = new SIPDataContext();
        dtoError _resp = new dtoError();
        tblDistrito _tbdistrito = new tblDistrito();
        List<dtoDistrito> _tbldistrito = new List<dtoDistrito>();

        public mgDistrito()
        {
        }

        /// <summary>
        /// Obtiene los distritos para ser mostrados en el listado de distritos
        /// </summary>
        /// <returns></returns>
        public List<dtoDistrito> ObtenerDistrito()
        {
            int i = 0;

            try
            {
                var condicion = (from p in dc.tblDistritos
                                 select p);

                foreach (tblDistrito  reg in condicion)
                {
                    _tbldistrito.Add(new dtoDistrito());
                    _tbldistrito[i].Identificacion = reg.id_distrito;
                    _tbldistrito[i].Descripcion = reg.descripcion;
                    _tbldistrito[i].Canton = reg.id_canton;
                    _tbldistrito[i].Estado = Convert.ToBoolean(reg.activo);
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _tbldistrito;

        }

        /// <summary>
        /// Obtiene el valor del distrito para mostrarlo en pantalla
        /// </summary>
        /// <param name="distrito"></param>
        /// <returns></returns>
        public List<dtoDistrito> ObtenerDistrito(dtoDistrito distrito)
        {
            int i = 0;

           try
            {

                var condicion = (from p in dc.tblDistritos
                                 where p.id_distrito == distrito.Identificacion
                                 select p);

                foreach (tblDistrito reg in condicion)
                {
                    _tbldistrito.Add(new dtoDistrito());
                    _tbldistrito[i].Identificacion = reg.id_distrito;
                    _tbldistrito[i].Descripcion = reg.descripcion;
                    _tbldistrito[i].Canton = reg.id_canton;
                    _tbldistrito[i].Estado = Convert.ToBoolean(reg.activo);
                    i++;
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un error al obtener los datos " + ex.Message);
            }

            return _tbldistrito;

        }

        /// <summary>
        /// Metodo encargado de la inclusión y modificación de los datos del distrito
        /// </summary>
        /// <param name="distrito"></param>
        /// <returns></returns>
        public dtoError AceptarDistrito(dtoDistrito distrito,int evento)
        {
            _tbdistrito.id_canton = distrito.Canton;
            _tbdistrito.id_distrito = distrito.Identificacion;
            _tbdistrito.descripcion = distrito.Descripcion;
            _tbdistrito.activo = distrito.Estado;

            try
            {
                _resp = ExisteDistrito(distrito);
                if ((_resp.IdError == -101) && (evento == 1)) //No existe el registro y se procede a ingresarlo
                {
                    dc.tblDistritos.InsertOnSubmit(_tbdistrito);
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información guardada correctamente.";
                    _resp.IdError = 100;

                }
                if ((_resp.IdError == 101) && (evento == 1))
                {
                    _resp.Mensaje = "La información del distrito ya se encuentra registrada.";
                    _resp.IdError = -100;
                }
                else if ((_resp.IdError == 101) && (evento == 2))// Se modifica los registros del distrito
                {
                    tblDistrito param = dc.tblDistritos.Single(p => p.id_canton == distrito.Canton && p.id_distrito == distrito.Identificacion);
                    param.descripcion = distrito.Descripcion;
                    param.activo = distrito.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Información modificada correctamente.";
                    _resp.IdError = 100;

                }
                return _resp;
            }

            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

        }

        /// <summary>
        ///         /// Metodo encargado de consultar la existencia del distrito en la base de datos para luego insertar el registro
        /// </summary>
        /// <param name="distrito"></param>
        /// <returns></returns>
        public dtoError ExisteDistrito(dtoDistrito distrito)
        {
            var condicion = (from p in dc.tblDistritos
                             where p.id_distrito== distrito.Identificacion
                             select p).Count();
            if (Convert.ToInt32(condicion.ToString()) > 0)
            {
                _resp.Mensaje = "El distrito ya existe en la tabla de Distrito";
                _resp.IdError = 101;

            }
            else
            {
                _resp.IdError = -101;
                _resp.Mensaje = "El distrito no existe en la tabla de Distrito";
            }
            return _resp;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="distrito"></param>
        /// <returns></returns>
        public dtoError InactivarDistrito(dtoDistrito distrito)
        {
            try
            {
                var condicion = (from p in dc.tblDistritos
                                 where p.id_distrito == distrito.Identificacion
                                 select p).ToList();
                foreach (tblDistrito _distrito in condicion)
                {
                    _distrito.activo = distrito.Estado;
                    dc.SubmitChanges();
                    _resp.Mensaje = "Distrito inactivado correctamente.";
                    _resp.IdError = 100;
                }

            }
            catch (Exception ex)
            {
                _resp.IdError = -100;
                _resp.Mensaje = ex.Message.ToString();
                return _resp;
                throw;
            }

            return _resp;
        }
      
    }
}

